// 1. 模块容器(仓库)管理模块
// 2. 可以向仓库注册新的模块
// 3. 模块可以依赖其它模块

// Module.define('User', ['Tool', 'Day', 'Axios'], function () {
//   //写删除业务,HttpRequest 网络请求
//   //展示几天/几月前
//   Day.format(User.createa_at)
//   //   Axios.delete(User.id)
// })

class Module {
  static collection = {}
  static register(name, modules, action) {
    //依赖模块提取
    const userModules = modules.map((m) => {
      const module = Module.collection[m]
      if (!module) throw new Error(`${m} 模块不存在`)
      return module
    })

    //将新模块注册进容器
    Module.collection[name] = action.apply(null, userModules)
  }
}

Module.register('Util', ['Day'], function () {
  return {
    sum(data, field) {
      return data.reduce((sum, v) => {
        return sum + v[field]
      }, 0)
    },
    avg(data, field) {
      //对处理的数据的验证
      if (!Array.isArray(data)) throw new Error('数据必须为数组类型')
      return this.sum(data, field) / data.length
    },
  }
})

Module.register('Day', [], function () {
  return {}
})

Module.register('User', ['Util', 'Day'], function (Util) {
  const users = [
    { name: '李四', age: 10 },
    { name: '小芸', age: 20 },
    { name: '张柯', age: 30 },
  ]
  const res = Util.avg(users, 'age')
  console.log(res)
})

Module.register('goods', ['Util', 'Day'], function (Util) {
  const goods = [
    { name: 'IPAD', price: 199 },
    { name: 'ThinkPad Carbon X1', price: 9999 },
    { name: 'macbook Air m1', price: 7000 },
  ]
  //   const res = Util.sum(goods, 'price')
  const res = Util.sum(goods, 'price')
  console.log(`你购物车总计为:${res}`)
})
